/*
    Asignatura: Procesadores de lenguajes.
    Practica de labotario numero 9.
    Autores:
                Guillermo Garcia Juanes (Alu3889)
                Jose Antonio Hernandez Gonzalez (Alu3809)

    Fichero: AnasinXML.g
    Contenido: Analizador Sintactico practica numero 9.
*/
parser grammar AnasinXMLv2;

options{
    tokenVocab = AnalexXMLv2;
}

@members {
    boolean autor;
}

@header{ package pl.equipo13.p9; 
import pl.equipo13.p9.exceptions.EtiquetaNoCerradaException;
import pl.equipo13.p9.exceptions.AutorErrorException;
}

//@rulecath { }

/*----------------------------------------------------REGLAS-SINTACTICO----------------------------------------------------*/

entrada:  (registro)* EOF;
    catch [EtiquetaNoCerradaException ence] {
        System.out.println(ence.toString());
    }
    catch [AutorErrorException aee] {
        System.out.println(aee.toString());
    }
registro: MENOR tagi=IDENT {
        if (("autor".equals(tagi.getText())) && !autor)
            autor = true;
        else if (("autor".equals(tagi.getText())) && autor) // Se han puesto dos autores
            throw new AutorErrorException(tagi,"<" + tagi.getText() + ">");
    }
          MAYOR (registro | CADENA)* MENORBARRA tagf=IDENT MAYOR {
        if (!tagi.getText().equals(tagf.getText()))
            throw new EtiquetaNoCerradaException(tagf, "</" + tagi.getText() + ">");
        if ("libro".equals(tagf.getText()) && autor)
            autor = false;
        else if ("libro".equals(tagf.getText()) && !autor) // No hay autor para el libo
            throw new AutorErrorException(tagf,"</" + tagf.getText() + ">");
    };
    catch [EtiquetaNoCerradaException ence] {
        throw ence;
    }
    catch [AutorErrorException aee] {
        throw aee;
    }